# Copyright 2016-2019 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)

language: cpp

dist: xenial

branches:
  only:
    - master
    - develop
    - /feature\/.*/

env:
  matrix:
    - BOGUS_JOB=true

matrix:

  exclude:
    - env: BOGUS_JOB=true

  include:
    - os: linux
      compiler: g++
      env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11,14 ADDRMD=32,64
      addons:
        apt:
          packages:
            - g++-multilib

    - os: linux
      arch: arm64
      compiler: g++
      env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11,14 ADDRMD=32,64

    - os: linux
      arch: ppc64le
      compiler: g++
      env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11,14

    - os: linux
      arch: s390x
      compiler: g++
      env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11,14 ADDRMD=32,64

    - os: linux
      compiler: g++-4.4
      env: TOOLSET=gcc COMPILER=g++-4.4 CXXSTD=98,0x
      addons:
        apt:
          packages:
            - g++-4.4
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      compiler: g++-4.6
      env: TOOLSET=gcc COMPILER=g++-4.6 CXXSTD=03,0x
      addons:
        apt:
          packages:
            - g++-4.6
          sources:
            - ubuntu-toolchain-r-test

    - os: linux
      dist: trusty
      compiler: g++
      env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11

    - os: linux
      dist: bionic
      compiler: g++-11
      env: UBSAN=1 TOOLSET=gcc COMPILER=g++-11 CXXSTD=03,11,14,17,20 UBSAN_OPTIONS=print_stacktrace=1 LINKFLAGS=-fuse-ld=gold
      addons:
        apt:
          packages:
            - g++-11
          sources:
            - sourceline: "ppa:ubuntu-toolchain-r/test"

    - os: linux
      dist: trusty
      compiler: /usr/bin/clang++
      env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
      addons:
        apt:
          packages:
            - clang-3.3

    - os: linux
      dist: trusty
      compiler: /usr/bin/clang++
      env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11
      addons:
        apt:
          packages:
            - clang-3.4

    - os: linux
      compiler: clang++-12
      env: UBSAN=1 TOOLSET=clang COMPILER=clang++-12 CXXSTD=03,11,14,17,20 UBSAN_OPTIONS=print_stacktrace=1
      addons:
        apt:
          packages:
            - clang-12
          sources:
            - ubuntu-toolchain-r-test
            - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-12 main'
              key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'

    - os: linux
      dist: bionic
      compiler: clang++-libc++
      env: UBSAN=1 TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,17,2a UBSAN_OPTIONS=print_stacktrace=1
      addons:
        apt:
          packages:
            - libc++-dev

    - os: freebsd
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,17,2a

    - os: osx
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z ADDRMD=32,64
      osx_image: xcode7.3

    - os: osx
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z ADDRMD=32,64
      osx_image: xcode8.3

    - os: osx
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z ADDRMD=32,64
      osx_image: xcode9.4

    - os: osx
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z
      osx_image: xcode10.1

    - os: osx
      osx_image: xcode11.3
      compiler: clang++
      env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z

    - os: osx
      osx_image: xcode12.2
      compiler: clang++
      env: UBSAN=1 TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1

    - os: linux
      env: CMAKE=1
      script:
        - mkdir __build__ && cd __build__
        - cmake -DBOOST_INCLUDE_LIBRARIES=system -DBUILD_TESTING=ON ..
        - cmake --build . --target tests
        - ctest --output-on-failure --no-tests=error

    - os: linux
      env: CMAKE=1 BUILD_SHARED_LIBS=ON
      script:
        - mkdir __build__ && cd __build__
        - cmake -DBUILD_SHARED_LIBS=ON -DBOOST_INCLUDE_LIBRARIES=system -DBUILD_TESTING=ON ..
        - cmake --build . --target tests
        - ctest --output-on-failure --no-tests=error

    - os: linux
      env: CMAKE_SUBDIR_TEST=1
      install:
        - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
        - git clone -b $BOOST_BRANCH https://github.com/boostorg/assert.git ../assert
        - git clone -b $BOOST_BRANCH https://github.com/boostorg/config.git ../config
        - git clone -b $BOOST_BRANCH https://github.com/boostorg/core.git ../core
        - git clone -b $BOOST_BRANCH https://github.com/boostorg/predef.git ../predef
        - git clone -b $BOOST_BRANCH https://github.com/boostorg/winapi.git ../winapi
      script:
      - cd test/cmake_subdir_test && mkdir __build__ && cd __build__
      - cmake ..
      - cmake --build .
      - cmake --build . --target check

    - os: linux
      env: CMAKE_INSTALL=1
      script:
        - pip install --user cmake
        - mkdir __build__ && cd __build__
        - cmake -DBOOST_INCLUDE_LIBRARIES=system -DCMAKE_INSTALL_PREFIX=~/.local ..
        - cmake --build . --target install
        - cd ../libs/system/test/cmake_install_test && mkdir __build__ && cd __build__
        - cmake -DCMAKE_INSTALL_PREFIX=~/.local ..
        - cmake --build .
        - cmake --build . --target check

install:
  - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
  - cd ..
  - git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
  - cd boost-root
  - git submodule update --init tools/boostdep
  - cp -r $TRAVIS_BUILD_DIR/* libs/system
  - python tools/boostdep/depinst/depinst.py system
  - ./bootstrap.sh
  - ./b2 headers

script:
  - |-
    echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
  - ./b2 -j3 libs/system/test toolset=$TOOLSET cxxstd=$CXXSTD variant=debug,release ${ADDRMD:+address-model=$ADDRMD} ${UBSAN:+cxxflags=-fsanitize=undefined cxxflags=-fno-sanitize-recover=undefined linkflags=-fsanitize=undefined define=UBSAN=1 debug-symbols=on} ${LINKFLAGS:+linkflags=$LINKFLAGS}

notifications:
  email:
    on_success: always
